home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / mgr / mgr.zoo / include.zoo / term.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-03-22  |  16.7 KB  |  610 lines

  1. /*                        Copyright (c) 1987 Bellcore
  2.  *                            All Rights Reserved
  3.  *       Permission is granted to copy or use this program, EXCEPT that it
  4.  *       may not be sold for profit, the copyright notice must be reproduced
  5.  *       on copies, and credit should be given to Bellcore where it is due.
  6.  *       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
  7.  */
  8. /*    $Header: /home/bammi/atari/mgr/sparcmgr/lib/RCS/term.h,v 1.1 1991/03/22 14:28:56 bammi Exp bammi $
  9.     $Source: /home/bammi/atari/mgr/sparcmgr/lib/RCS/term.h,v $
  10. */
  11. static char    h_term_[] = "$Source: /home/bammi/atari/mgr/sparcmgr/lib/RCS/term.h,v $$Revision: 1.1 $";
  12.  
  13. /* macros for writing to mgr terminal emulator */
  14.  
  15. #ifndef _TERM_INCL
  16. #define _TERM_INCL
  17.  
  18. #include "window.h"
  19.  
  20. #ifdef atarist
  21. #include <string.h>
  22. #endif
  23.  
  24. #ifndef stderr
  25. #include <stdio.h>
  26. #endif
  27.  
  28. #ifndef ECHO
  29. #include <sgtty.h>
  30. #endif
  31.  
  32. /* structure definitions */
  33.  
  34. #define MENU_SIZE(x)    ((int)(sizeof(x)/sizeof(struct menu_entry)))
  35.  
  36. struct menu_entry {
  37.    char *value;        /* this appears in the menu */
  38.    char *action;    /* this gets sent by mgr upon selection */
  39.    };
  40.  
  41. struct window_data {
  42.    int x,y;        /* origin */
  43.    int w,h;        /* width, height */
  44.    char tty[3];        /* name of controlling tty */
  45.    char status;        /* activation status */
  46.    int num;        /* window number (>0 for client) */
  47.    int setid;        /* window set ID */
  48.    };
  49.  
  50. struct icon {
  51.    char *name;        /* name of icon */
  52.    int type;        /* always 1 */
  53.    int w;        /* bitmap width */
  54.    int h;        /* bitmap height */
  55.    unsigned char *data;    /* data goes here */
  56.    };
  57.  
  58. /* protos */
  59.  
  60. #if defined(__STDC__) || defined(__cplusplus)
  61. # define P_(s) s
  62. #else
  63. # define P_(s) ()
  64. #endif
  65.  
  66.  
  67. /* ckmgrterm.c */
  68. void ckmgrterm P_((char *text));
  69.  
  70. /* term.c */
  71. int m_setup P_((int flags));
  72. int get_info P_((int type, char **list));
  73. int get_windata P_((struct window_data *windatap));
  74. int get_eachwin P_((struct window_data *windatap));
  75. int get_eachclientwin P_((struct window_data *windatap));
  76. int get_all P_((struct window_data *list));
  77. int get_client P_((struct window_data *list));
  78. int get_size P_((int *x, int *y, int *wide, int *high));
  79. int get_mouse P_((int *x, int *y));
  80. int get_param P_((char *host, int *xmax, int *ymax, int *border));
  81. int get_cursor P_((int *x, int *y));
  82. int get_colrow P_((int *cols, int *rows));
  83. char *get_termcap P_((void));
  84. int get_font P_((int *wide, int *high));
  85. int m_makewindow P_((int x, int y, int wide, int high));
  86. int is_active P_((void));
  87. char *m_lastline P_((void));
  88. int menu_load P_((int n, int count, struct menu_entry *text));
  89. int m_bitload P_((int x, int y, int w, int h, char *data));
  90. int m_ttyset P_((void));
  91. int m_ttyreset P_((void));
  92. int m_resetflags P_((int flags));
  93. int m_setflags P_((int flags));
  94. int m_bitfile P_((int bitmapid, char *iconname, int *iconwidthp, int *iconheightp));
  95. int parse P_((char *line, char **fields));
  96. void _Catch P_((void));
  97. void _Clean P_((void));
  98.  
  99. /* text.c */
  100. int text P_((char *s, int x, int y, int font, int angle, int size_x, int size_y));
  101.  
  102. /* sfont.c */
  103. int sfont P_((int font, int ch, short *min, short *max, int *npts, short *pts));
  104.  
  105. /* sin.c */
  106. int isin P_((int n));
  107. int icos P_((int n));
  108.  
  109. /* scribe.c */
  110. int scribe P_((int font, int ch, short *min, short *max, int *npts, short *pts));
  111.  
  112. #undef P_
  113.  
  114. #define TTYMAX        10    /* stack size for ttyset() */
  115.  
  116. #define M_FLUSH        0x1    /* autoflush output after each write */
  117. #define M_DEBUG        0x2    /* use stderr instead of /dev/tty mgr i/o */
  118. #define M_MODEOK    0x4    /* assume tty modes are always ok */
  119.  
  120. #ifndef M_DEVICEIN
  121. #define M_DEVICEIN    "/dev/tty"
  122. #endif
  123.  
  124. #ifndef M_DEVICEOUT
  125. #define M_DEVICEOUT    "/dev/tty"
  126. #endif
  127.  
  128.  
  129. #define m_flush()        fflush(m_termout)
  130.  
  131. #define BTWN(a,x,b)    \
  132.     ((x)<(a)?a:(x)>(b)?b:x)
  133. #define LIMIT(x)    BTWN(0,x,1152)
  134.  
  135. #ifndef M_NOFLUSH
  136. #define _m_flsh        ,(m_flags&M_FLUSH?m_flush():m_flags)
  137. #else
  138. #define _m_flsh
  139. #endif
  140.  
  141. /* vi-like stuff */
  142.  
  143. #define m_addline() \
  144.     (fprintf(m_termout,"%c%c",m_escchar,E_ADDLINE)_m_flsh)
  145.  
  146. #define m_addlines(n) \
  147.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_ADDLINE)_m_flsh)
  148.  
  149. #define m_addchar() \
  150.     (fprintf(m_termout,"%c%c",m_escchar,E_ADDCHAR)_m_flsh)
  151.  
  152. #define m_addchars(n) \
  153.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_ADDCHAR)_m_flsh)
  154.  
  155. #define m_deleteline() \
  156.     (fprintf(m_termout,"%c%c",m_escchar,E_DELETELINE)_m_flsh)
  157.  
  158. #define m_deletelines(n) \
  159.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_DELETELINE)_m_flsh)
  160.  
  161. #define m_deletechar() \
  162.     (fprintf(m_termout,"%c%c",m_escchar,E_DELETECHAR)_m_flsh)
  163.  
  164. #define m_deletechars(n) \
  165.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_DELETECHAR)_m_flsh)
  166.  
  167. #define m_standend() \
  168.     (fprintf(m_termout,"%c%c",m_escchar,E_STANDEND)_m_flsh)
  169.  
  170. #define m_standout() \
  171.     (fprintf(m_termout,"%c%c",m_escchar,E_STANDOUT)_m_flsh)
  172.  
  173. #define m_bell() \
  174.     (fprintf(m_termout,"\007")_m_flsh)
  175.  
  176. #define m_setcursor(n) \
  177.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_SETCURSOR)_m_flsh)
  178.  
  179. /* lines */
  180.  
  181. /*
  182. #define m_line(x0,y0,x1,y1) \
  183.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar, \
  184.     LIMIT(x0),LIMIT(y0),LIMIT(x1),LIMIT(y1),E_LINE)_m_flsh)
  185. */
  186.  
  187. #define m_line(x0,y0,x1,y1) \
  188.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar, \
  189.     x0,y0,x1,y1,E_LINE)_m_flsh)
  190.  
  191. #define m_lineto(to,x0,y0,x1,y1) \
  192.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d%c",m_escchar, \
  193.     x0,y0,x1,y1,to,E_LINE)_m_flsh)
  194.  
  195. #define m_draw(x,y) \
  196.     (fprintf(m_termout,"%c%d,%d%c",m_escchar, \
  197.     LIMIT(x),LIMIT(y),E_LINE)_m_flsh)
  198.  
  199. #define m_fastdraw(x,y,count,buff) \
  200.     (fprintf(m_termout,"%c%d,%d,%d%c",m_escchar, \
  201.     LIMIT(x),LIMIT(y),count,E_GRUNCH), \
  202.     fwrite(buff,1,count,m_termout)_m_flsh)
  203.  
  204. #define m_rfastdraw(count,buff) \
  205.     (fprintf(m_termout,"%c%d%c",m_escchar, \
  206.     count,E_GRUNCH), \
  207.     fwrite(buff,1,count,m_termout)_m_flsh)
  208.  
  209. #define m_aligntext() \
  210.     (fprintf(m_termout,"%c%c",m_escchar, \
  211.     E_LINE)_m_flsh)
  212.  
  213. #define m_gotext() \
  214.     (fprintf(m_termout,"%c%c",m_escchar, \
  215.     E_GO)_m_flsh)
  216.  
  217. #define m_go(x,y) \
  218.     (fprintf(m_termout,"%c%d,%d%c",m_escchar, \
  219.     LIMIT(x),LIMIT(y),E_GO)_m_flsh)
  220.  
  221. /* bitblits */
  222.  
  223. #define m_clear() \
  224.     (fprintf(m_termout,"%c",C_FF)_m_flsh)
  225.  
  226. #define m_func(func)\
  227.     (fprintf(m_termout,"%c%d%c",m_escchar,func,E_BITBLT)_m_flsh)
  228.  
  229. #define m_bitwrite(x,y,w,h) \
  230.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,w,h,E_BITBLT)_m_flsh)
  231.  
  232. #define m_bitwriteto(x,y,w,h,to) \
  233.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d%c", \
  234.     m_escchar,x,y,w,h,to,E_BITBLT)_m_flsh)
  235.  
  236. #define m_bitcopy(xd,yd,w,h,xs,ys) \
  237.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d%c", \
  238.     m_escchar,xd,yd,w,h,xs,ys,E_BITBLT)_m_flsh)
  239.  
  240. #define m_bitcopyto(xd,yd,w,h,xs,ys,to,from) \
  241.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d,%d,%d%c", \
  242.     m_escchar,xd,yd,w,h,xs,ys,to,from,E_BITBLT)_m_flsh)
  243.  
  244. #define m_bitld(w,h,x,y,size) \
  245.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d%c",\
  246.     m_escchar,w,h,x,y,size,E_BITLOAD),m_flush())
  247.  
  248. #define m_bitldto(w,h,x,y,to,size) \
  249.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d%c",\
  250.     m_escchar,w,h,x,y,to,size,E_BITLOAD),m_flush())
  251.  
  252. #define m_bitdestroy(n) \
  253.     (fprintf(m_termout,"%c%d%c",\
  254.     m_escchar,n,E_BITCRT),m_flush())
  255.  
  256. #define m_bitcreate(n,w,h) \
  257.     (fprintf(m_termout,"%c%d,%d,%d%c",\
  258.     m_escchar,n,w,h,E_BITCRT),m_flush())
  259.  
  260. #define m_bitget(from,size,offset) \
  261.     (fprintf(m_termout,"%c%d,%d,%d%c",\
  262.     m_escchar,from,size,offset,E_BITGET),m_flush())
  263.  
  264. #define m_othersave(id,sub,name) \
  265.     (fprintf(m_termout,"%c%d,%d,%d%c%s",\
  266.     m_escchar,id,sub,(int)(strlen(name)),E_SMAP,name)_m_flsh)
  267.  
  268. #define m_windowsave(name) \
  269.     (fprintf(m_termout,"%c%d%c%s",\
  270.     m_escchar,(int)(strlen(name)),E_SMAP,name)_m_flsh)
  271.  
  272. #define m_bitsave(from,name) \
  273.     (fprintf(m_termout,"%c%d,%d%c%s",\
  274.     m_escchar,from,(int)(strlen(name)),E_SMAP,name)_m_flsh)
  275.  
  276. #define m_bitfromfile(to,name) \
  277.     (fprintf(m_termout,"%c%d,%d%c%s",\
  278.     m_escchar,to,(int)(strlen(name)),E_GMAP,name)_m_flsh)
  279.  
  280. #define m_highlight(x,y,w,h) \
  281.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",\
  282.     m_escchar,x,y,w,h,E_BLEEP),m_flush())
  283.  
  284. #define m_stringto(to,x,y,text) \
  285.     (fprintf(m_termout,"%c%d,%d,%d,%d%c%s",\
  286.     m_escchar,to,x,y,(int)(strlen(text)),E_STRING,text)_m_flsh)
  287.  
  288. /* other graphic functions */
  289.  
  290. #define m_circle(x,y,r) \
  291.     (fprintf(m_termout,"%c%d,%d,%d%c",m_escchar, \
  292.     LIMIT(x),LIMIT(y),LIMIT(r),E_CIRCLE)_m_flsh)
  293.  
  294. #define m_ellipse(x,y,r1,r2) \
  295.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar, \
  296.     LIMIT(x),LIMIT(y),LIMIT(r1),LIMIT(r2),E_CIRCLE)_m_flsh)
  297.  
  298. #define m_arc(x,y,x1,y1,x2,y2) \
  299.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d%c",m_escchar, \
  300.     LIMIT(x),LIMIT(y),LIMIT(x1),LIMIT(y1),LIMIT(x2),LIMIT(y2), \
  301.     E_CIRCLE)_m_flsh)
  302.  
  303. #define m_ellipseto(to,x,y,r1,r2) \
  304.     (fprintf(m_termout,"%c%d,%d,%d,%d,%d%c",m_escchar, \
  305.     LIMIT(x),LIMIT(y),LIMIT(r1),LIMIT(r2),to,E_CIRCLE)_m_flsh)
  306.  
  307. #define m_rcircle(r) \
  308.     (fprintf(m_termout,"%c%d%c",m_escchar, \
  309.     LIMIT(r),E_CIRCLE)_m_flsh)
  310.  
  311. #define m_rellipse(r1,r2) \
  312.     (fprintf(m_termout,"%c%d,%d%c",m_escchar, \
  313.     LIMIT(r1),LIMIT(r2),E_CIRCLE)_m_flsh)
  314.  
  315.  
  316. #define m_movemouse(x,y) \
  317.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_MOUSE)_m_flsh)
  318.  
  319. #define m_movecursor(x,y) \
  320.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_MOVE)_m_flsh)
  321.  
  322. #define m_move(col,row) \
  323.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,col,row,E_CUP)_m_flsh)
  324.  
  325. #define m_moveprint(x,y,str) \
  326.     (fprintf(m_termout,"%c%d,%d%c%s",m_escchar,x,y,E_MOVE,str)_m_flsh)
  327.  
  328. #define m_incr(x) \
  329.     (fprintf(m_termout,"%c%d%c",m_escchar,x,E_MOVE)_m_flsh)
  330.  
  331. #define m_cleareol() \
  332.     (fprintf(m_termout,"%c%c",m_escchar,E_CLEAREOL)_m_flsh)
  333.  
  334. #define m_cleareos() \
  335.     (fprintf(m_termout,"%c%c",m_escchar,E_CLEAREOS)_m_flsh)
  336.  
  337. /* window manipulation */
  338.  
  339. #define m_movewindow(x,y) \
  340.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_SHAPE)_m_flsh)
  341.  
  342. #define m_shapewindow(x,y,dx,dy) \
  343.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,dx,dy,E_SHAPE)_m_flsh)
  344.  
  345. #define m_font(x) \
  346.     (fprintf(m_termout,"%c%d%c",m_escchar,x,E_FONT)_m_flsh)
  347.  
  348. #define m_loadfont(n,name) \
  349.     (fprintf(m_termout,"%c%d,%d%c%s", \
  350.     m_escchar,n,(int)(strlen(name)),E_FONT,name)_m_flsh)
  351.  
  352. #define m_size(cols,rows) \
  353.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,cols,rows,E_SIZE)_m_flsh)
  354.  
  355. #define m_sizeall(x,y,cols,rows) \
  356.     (fprintf(m_termout,"%c%d,%d,%d,%d%c", \
  357.          m_escchar,x,y,cols,rows,E_SIZE)_m_flsh)
  358.  
  359. #define m_scrollregion(first,last) \
  360.     (fprintf(m_termout,"%c%d,%d%c", \
  361.     m_escchar,first,last,E_TEXTREGION)_m_flsh)
  362.  
  363. #define m_textregion(x,y,wide,high) \
  364.     (fprintf(m_termout,"%c%d,%d,%d,%d%c", \
  365.     m_escchar,x,y,wide,high,E_TEXTREGION)_m_flsh)
  366.  
  367. #define m_textreset() \
  368.     (fprintf(m_termout,"%c%c",m_escchar,E_TEXTREGION)_m_flsh)
  369.  
  370. /* window creation/ destruction */
  371.  
  372. #define m_newwin(x,y,w,h) \
  373.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,w,h,E_MAKEWIN)_m_flsh)
  374.  
  375. #define m_destroywin(n) \
  376.     (fprintf(m_termout,"%c%d,0%c",m_escchar,n,E_MAKEWIN)_m_flsh)
  377.  
  378. #define m_selectwin(n) \
  379.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_MAKEWIN)_m_flsh)
  380.  
  381. /* events */
  382.  
  383. #define m_setevent(event,x) \
  384.     (fprintf(m_termout,"%c%d,%d%c%s", \
  385.     m_escchar,_mapevent(event),(int)(strlen(x)),E_EVENT,x)_m_flsh)
  386.  
  387. #define m_clearevent(event) \
  388.     (fprintf(m_termout,"%c%d%c", \
  389.     m_escchar,_mapevent(event),E_EVENT)_m_flsh)
  390.  
  391. /* message passing */
  392.  
  393. #define m_sendme(str) \
  394.     (fprintf(m_termout,"%c%d%c%s", \
  395.     m_escchar,(int)(strlen(str)),E_GIMME,str)_m_flsh)
  396.  
  397. #define m_sendto(pid,str) \
  398.     (fprintf(m_termout,"%c%d,%d%c%s", \
  399.     m_escchar,pid,(int)(strlen(str)),E_SEND,str)_m_flsh)
  400.  
  401. #define m_broadcast(str) \
  402.     (fprintf(m_termout,"%c%d%c%s", \
  403.     m_escchar,(int)(strlen(str)),E_SEND,str)_m_flsh)
  404.  
  405. #define m_snarf(str) \
  406.     (fprintf(m_termout,"%c%d%c%s", \
  407.     m_escchar,(int)(strlen(str)),E_SNARF,str)_m_flsh)
  408.  
  409. #define m_put() \
  410.     (fprintf(m_termout,"%c%c", \
  411.     m_escchar,E_PUTSNARF)_m_flsh)
  412.  
  413. /* environment stacking */
  414.  
  415. #define m_push(mode) \
  416.     (m_envcount++, \
  417.          fprintf(m_termout,"%c%d%c",m_escchar,(mode)|P_CLEAR,E_PUSH) \
  418.          _m_flsh)
  419.  
  420. #define m_pushsave(mode) \
  421.     (m_envcount++, \
  422.     fprintf(m_termout,"%c%d%c",m_escchar,(mode),E_PUSH)_m_flsh)
  423.  
  424. #define m_pop() \
  425.     (m_envcount?m_envcount--:0, \
  426.          fprintf(m_termout,"%c%c",m_escchar,E_POP)_m_flsh)
  427.  
  428. #define m_popall() \
  429.     while(m_envcount--) \
  430.          (fprintf(m_termout,"%c%c",m_escchar,E_POP)_m_flsh)
  431.  
  432. /* tty mode settings */
  433.  
  434. #define m_setraw() \
  435.     m_setflags(RAW)
  436.  
  437. #define m_setnoraw() \
  438.     m_resetflags(RAW)
  439. #define m_unsetraw    m_setnoraw        /* obsolete */
  440.  
  441. #define m_setecho()     \
  442.         m_setflags(ECHO)
  443.  
  444. #define m_setnoecho() \
  445.         m_resetflags(ECHO)
  446.  
  447. /* other stuff */
  448.  
  449. #define m_setmode(mode) \
  450.     (fprintf(m_termout,"%c%d%c",m_escchar,mode,E_SETMODE)_m_flsh)
  451.  
  452. #define m_dupkey(key) \
  453.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,M_DUPKEY,key,E_SETMODE)_m_flsh)
  454.  
  455. #define m_clearmode(mode) \
  456.     (fprintf(m_termout,"%c%d%c",m_escchar,mode,E_CLEARMODE)_m_flsh)
  457.  
  458. #define m_getinfo(x) \
  459.     (fprintf(m_termout,"%c%d%c",m_escchar,x,E_GETINFO),m_flush())
  460.  
  461. #define m_whatsat(x,y) \
  462.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_GETINFO),m_flush())
  463.  
  464. #define m_get()\
  465.     (m_flush(),fgets(m_linebuf,sizeof(m_linebuf),m_termin))
  466.  
  467. #define m_getchar()\
  468.     (getc(m_termin))
  469.  
  470. #define m_gets(buff)\
  471.     (m_flush(),fgets(buff,sizeof(buff),m_termin))
  472.  
  473. #define m_putchar(c) \
  474.     (putc(c,m_termout)_m_flsh)
  475.  
  476. #define m_printstr(str) \
  477.     (fprintf(m_termout,"%s",str)_m_flsh)
  478.  
  479. #define m_setesc(x) \
  480.     (m_escchar = (x))
  481.  
  482. #define m_resetesc() \
  483.     (m_escchar = ESC)
  484.  
  485. #define m_sleep() \
  486.     (fprintf(m_termout,"%c%c",m_escchar,E_NULL)_m_flsh)
  487.  
  488. /* menu stuff */
  489.  
  490. #ifndef M_DELIM
  491. #define M_DELIM    '\005'        /* menu delimiter character */
  492. #endif
  493.  
  494. #define m_selectmenu(n) \
  495.     (fprintf(m_termout,"%c%d%c",m_escchar,n,E_MENU)_m_flsh)
  496.  
  497. #define m_selectmenu2(n) \
  498.     (fprintf(m_termout,"%c-%d%c",m_escchar,n,E_MENU)_m_flsh)
  499.  
  500. #define m_nomenu() \
  501.     (fprintf(m_termout,"%c%d%c",m_escchar,999,E_MENU)_m_flsh)
  502.  
  503. #define m_nomenu2() \
  504.     (fprintf(m_termout,"%c-%d%c",m_escchar,999,E_MENU)_m_flsh)
  505.  
  506. #define m_loadmenu(n,str) \
  507.     (fprintf(m_termout,"%c%d,%d%c%s",m_escchar,n,(int)(strlen(str)),E_MENU,str)_m_flsh)
  508.  
  509. #define m_clearmenu(n) \
  510.     (fprintf(m_termout,"%c%d,0%c",m_escchar,n,E_MENU)_m_flsh)
  511.  
  512. #define m_linkmenu(parent,item,child,flags) \
  513.     (fprintf(m_termout,"%c%d,%d,%d,%d%c", \
  514.     m_escchar,parent,item,child,flags,E_MENU)_m_flsh)
  515.  
  516. #define m_unlinkmenu(parent,item) \
  517.     (fprintf(m_termout,"%c%d,%d,%d,%c", \
  518.     m_escchar,parent,item,-1,E_MENU)_m_flsh)
  519.  
  520. #define m_pagemenu(parent,child) \
  521.     (fprintf(m_termout,"%c%d,%d,%d,%c", \
  522.     m_escchar,parent,-1,child,E_MENU)_m_flsh)
  523.  
  524. #define m_unpagemenu(parent) \
  525.     (fprintf(m_termout,"%c%d,%d,%d,%c", \
  526.     m_escchar,parent,-1,-1,E_MENU)_m_flsh)
  527.  
  528. /* temporary menu stuff */
  529.  
  530. #define m_menuitem(menu,item) \
  531.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,menu,item,E_FOO)_m_flsh)
  532.  
  533. #define m_menuerase(menu) \
  534.     (fprintf(m_termout,"%c%d%c",m_escchar,menu,E_FOO)_m_flsh)
  535.  
  536. #define m_menushow(x,y,menu) \
  537.     (fprintf(m_termout,"%c%d,%d,%d%c",m_escchar,x,y,menu,E_FOO)_m_flsh)
  538.  
  539. #define m_menubar(x,y,menu,item) \
  540.     (fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,menu,item,E_FOO)_m_flsh)
  541.  
  542. /* temporary relative character motion */
  543.  
  544. #define m_right(tenths) \
  545.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,10,E_RIGHT)_m_flsh)
  546.  
  547. #define m_left(tenths) \
  548.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,-10,E_RIGHT)_m_flsh)
  549.  
  550. #define m_up(tenths) \
  551.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,10,E_UP)_m_flsh)
  552.  
  553. #define m_down(tenths) \
  554.     (fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,10,E_DOWN)_m_flsh)
  555.  
  556. /* color stuff */
  557.  
  558. #define m_fcolor(color) \
  559.         (fprintf(m_termout,"%c%d%c",m_escchar,color,E_FCOLOR)_m_flsh)
  560. #define m_bcolor(color) \
  561.         (fprintf(m_termout,"%c%d%c",m_escchar,color,E_BCOLOR)_m_flsh)
  562. #define m_linecolor(op,color) \
  563.         (fprintf(m_termout,"%c%d,%d%c",m_escchar,op,color,E_BITBLT)_m_flsh)
  564.  
  565. #define _mapevent(z)                ((z)==3||(z)==4?2-(z):z)
  566.  
  567. /* events */
  568.  
  569. #define BUTTON_1        1        /* end button depressed */
  570. #define BUTTON_2        2        /* middle button depressed */
  571. #define BUTTON_1U        3        /* end button released */
  572. #define BUTTON_2U        4        /* middle button released */
  573. #define RESHAPE            5        /* window was reshaped */
  574. #define RESHAPED        5        /* window was reshaped */
  575. #define REDRAW            6        /* screen was redrawn */
  576. #define REDRAWN            6        /* screen was redrawn */
  577. #define ACTIVATE        7        /* window was activated */
  578. #define ACTIVATED        7        /* window was activated */
  579. #define DEACTIVATE        8        /* window was deactivated */
  580. #define DEACTIVATED        8        /* window was deactivated */
  581. #define COVERED            9        /* window was covered */
  582. #define UNCOVERED        10        /* window was uncovered */
  583. #define MOVE            11        /* window was moved */
  584. #define MOVED            11        /* window was moved */
  585. #define DESTROY            12        /* window was destroyed */
  586. #define ACCEPT            13        /* accept messages */
  587. #define NOTIFY            14        /* set notification */
  588. #define SNARFED            16        /* text was just snarfed */
  589. #define PASTE            17        /* text was just pasted */
  590.  
  591. /* stuff for setting terminal modes */
  592.  
  593. #define _m_ttyset()        (m_flags&M_MODEOK?m_flags:m_ttyset())
  594. #define _m_ttyreset()        (m_flags&M_MODEOK?m_flags:m_ttyreset())
  595.  
  596. /* global variables */
  597.  
  598. #define MAXLINE        256    /* maximum line size from mgr */
  599.  
  600. extern FILE *m_termin;        /* output to window */
  601. extern FILE *m_termout;        /* input from mgr */
  602. extern int m_flags;        /* setup flags */
  603. extern int m_envcount;        /* # of stacked environments */
  604. extern int m_saveenvcount;    /* ??? */
  605. extern char m_escchar;        /* \033, change only for debugging */
  606. extern char m_menuchar;        /* menu field seperator char (\005) */
  607. extern char m_linebuf[MAXLINE];
  608.  
  609. #endif _TERM_INCL
  610.